import { defineStore } from 'pinia'
import { ref } from 'vue'

// 定义用户角色类型
export enum UserRole {
  ADMIN = 'admin',
  MANAGER = 'manager',
  USER = 'user',
}

// 定义用户信息接口
export interface UserInfo {
  username: string
  role: UserRole
}

/**
 * 用户认证状态管理
 * 管理用户登录、注册和登出功能
 */
export const useUserStore = defineStore(
  'LandslideRiskProtectSystem-user',
  () => {
    // 用户信息
    const userInfo = ref<UserInfo | null>(null)
    // 登录状态
    const isLoggedIn = ref(false)
    // 管理员账号信息（测试环境）
    const adminAccount = {
      username: 'admin',
      password: 'admin123',
    }

    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @returns 登录结果，成功返回true，失败返回false
     */
    function login(username: string, password: string): boolean {
      // 管理员登录验证
      if (username === adminAccount.username && password === adminAccount.password) {
        userInfo.value = {
          username,
          role: UserRole.ADMIN,
        }
        isLoggedIn.value = true
        return true
      }

      // 普通用户登录验证（从localStorage获取注册的用户信息）
      const registeredUsers = JSON.parse(localStorage.getItem('registeredUsers') || '[]')
      const user = registeredUsers.find(
        (u: { username: string; password: string }) =>
          u.username === username && u.password === password,
      )

      if (user) {
        userInfo.value = {
          username,
          role: UserRole.USER,
        }
        isLoggedIn.value = true
        return true
      }

      return false
    }

    /**
     * 用户注册
     * @param username 用户名
     * @param password 密码
     * @returns 注册结果，成功返回true，失败返回false
     */
    function register(username: string, password: string): boolean {
      // 检查是否是管理员用户名（不允许注册管理员）
      if (username === adminAccount.username) {
        return false
      }

      // 获取已注册用户
      const registeredUsers = JSON.parse(localStorage.getItem('registeredUsers') || '[]')

      // 检查用户名是否已存在
      if (registeredUsers.some((u: { username: string }) => u.username === username)) {
        return false
      }

      // 添加新用户
      registeredUsers.push({ username, password })
      localStorage.setItem('registeredUsers', JSON.stringify(registeredUsers))

      // 自动登录
      userInfo.value = {
        username,
        role: UserRole.USER,
      }
      isLoggedIn.value = true

      return true
    }

    /**
     * 用户登出
     */
    function logout() {
      userInfo.value = null
      isLoggedIn.value = false
    }

    return {
      userInfo,
      isLoggedIn,
      adminAccount,
      login,
      register,
      logout,
    }
  },
  {
    // 持久化存储
    persist: true,
  },
)
